-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Implement normalize_lexically
#134696
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Implement normalize_lexically
#134696
Conversation
rustbot has assigned @workingjubilee. Use |
c08079c
to
8a3fb66
Compare
library/std/src/path.rs
Outdated
Component::RootDir | Component::Prefix(_) => return Err(NormalizeError), | ||
Component::CurDir => continue, | ||
Component::ParentDir => { | ||
if lexical.as_os_str().len() == root { | ||
return Err(NormalizeError); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is also a "should never happen" case, isn't it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah, I remember now. As per the RFC, we need to guard against popping from the path when there's nothing to pop. So a/../..
must error which is simple enough. But the complicating factor here is that base paths like C:\
are split by components
as (Prefix, RootDir)
whereas in reality you almost always want to treat C:\
as one unit. So it checks if popping would go above the root by just doing a length check. This handles whatever the "root" may be, e.g. C:
(without the \
) or whatever.
☔ The latest upstream changes (presumably #136533) made this pull request unmergeable. Please resolve the merge conflicts. |
Hmm. This wasn't supposed to get frozen on those two questions, so I'm just going to rebase this and approve it. If I think we maybe should call |
8a3fb66
to
2955213
Compare
This comment has been minimized.
This comment has been minimized.
ugh, the move of the tests breaks them because they relied on a struct expr |
2955213
to
138d7ef
Compare
Sorry for the delay here, I've kept getting distracted by other things. I've rebased, fixed the tests and squished. |
138d7ef
to
79a1ef4
Compare
This comment has been minimized.
This comment has been minimized.
79a1ef4
to
6efb929
Compare
6efb929
to
8788da1
Compare
Implements #134694
This is, I think, the most straightforward implementation I could do, which will hopefully more easily allow experimentation if we decide to change the design here.